package TarryDAOS;

import Herramientas.PasarelaDatos;
import Herramientas.ResultSets;
import TarryDTOS.ExistenciasProductoDTO;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Alan
 */
public class ExistenciasProductoDAO {

    private PasarelaDatos db;
    private ResultSets res;

    public ExistenciasProductoDAO() {
        db = new PasarelaDatos();
        res = new ResultSets();
    }

    /**
     * ALAN GONZALEZ METODO PARA OBTENER LA EXISTENCIA DE UN PRODUCTO EN
     * PARTICULAR
     *
     * @param claveProducto
     * @return
     */
    public int existenciaProducto(int claveProducto) {
        int existencia = 0;
        String query = "SELECT existencia_producto.existencias FROM existencia_producto WHERE existencia_producto.id = " + claveProducto;
        db.openDatabase();
        ResultSet rst = db.executeQuery(query);
        try {
            if (rst.next()) {
                existencia = rst.getInt("existencias");
            } else {
                existencia = 0;
            }
        } catch (SQLException ex) {
            Logger.getLogger(ExistenciasProductoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return existencia;
    }

    /**
     * ALAN GONZALEZ | ESTE METODO ACTUALIZA EL NUMERO DE EXISTENCIAS UN
     * DETERINDO PRODUCTO banderaOperacion 0 = SUMA LA EXISTENCIA CON LA
     * CANTIDAD INGRESADA banderaOperacion 1 = RESTA DE LA EXISTENCIA LA
     * CANTIDAD INGRESADA banderaOperacion 2 = SE DEJA A CERO LA EXISTENCIA
     */
    public void actualizaExistenciasProducto(int idProducto, int banderaOperacion, int cantidadOperacion) {
        // SE SOLICITA EL NUMERO DE EXISTENCIAS DEL PRODUCTO
        int existenciaProducto = this.existenciaProducto(idProducto);
        db.openDatabase();
        String sql = new String();
        switch (banderaOperacion) {
            case 0:
                // SE SUMAN LAS EXISTENCIAS [ INGRESOS ]
                existenciaProducto = ((existenciaProducto) + (cantidadOperacion));
                sql = "UPDATE existencia_producto SET existencia_producto.existencias =" + existenciaProducto + " WHERE existencia_producto.id =" + idProducto;
                db.execute(sql);
                break;
            case 1:
                // SE RESTAN LAS EXISTENCIAS [ EGRESOS ]  -->  SE ESCRIBE LA BADERA DE ESTADO COMO SURTIDO 
                existenciaProducto = ((existenciaProducto) - (cantidadOperacion));
                sql = "UPDATE existencia_producto SET existencia_producto.existencias =" + existenciaProducto + " WHERE existencia_producto.id =" + idProducto;
                db.execute(sql);
                break;
            case 2:
                sql = "UPDATE existencia_producto SET existencia_producto.existencias = 0 WHERE existencia_producto.id =" + idProducto;
                db.execute(sql);
                break;
        }
        db.closeDatabase();
    }

    /**
     * ALAN GONZALEZ LISTA LAS EXISTENCIAS REGISTRADAS EN LA BASE DE DATOS
     *
     * @return
     */
    public Vector existenciasProducto() {
        Vector vExt = new Vector();
        String sql = "";
        sql += " SELECT ";
        sql += " existencia_producto.id as clave,";
        sql += " productos_venta.nombre_producto as descripcion,";
        sql += " existencia_producto.existencias as exietncia";
        sql += " FROM ";
        sql += " existencia_producto, productos_venta";
        sql += " WHERE";
        sql += " existencia_producto.id = productos_venta.id";
        db.openDatabase();
        ResultSet rst = db.executeQuery(sql);
        try {
            while (rst.next()) {
                ExistenciasProductoDTO ex = new ExistenciasProductoDTO();
                ex = res.existenciasProductoDTO(rst);
                vExt.add(ex);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ExistenciasProductoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return vExt;
    }
}
